package main

import (
	"github.com/sirupsen/logrus"
	"sync"
)

// 全局配置变量
var (
	authToken  string         // API认证令牌
	listenPort string         // 服务监听端口
	logLevel   string         // 日志级别(debug/info/warn/error)
	log        = logrus.New() // 全局日志记录器（已配置格式和级别）
)

// ServiceHistory 线程安全的服务版本历史记录存储
type ServiceHistory struct {
	sync.Mutex                     // 互斥锁保证并发安全
	versions   map[string][]string // 服务版本映射表 serviceName -> []imageVersions
}

// logrusWriter 实现io.Writer接口，用于重定向命令输出到logrus
type logrusWriter struct{}

// Write 实现io.Writer接口的标准方法
func (w logrusWriter) Write(p []byte) (n int, err error) {
	logrus.Info(string(p)) // 使用logrus记录信息
	return len(p), nil     // 确保符合接口规范
}

// DockerComposeManager Docker Compose操作管理器
type DockerComposeManager struct {
	defaultFilePath string          // 默认compose文件路径
	authToken       string          // 认证令牌
	logger          *logrus.Logger  // 日志记录器
	serviceHistory  *ServiceHistory // 版本历史记录
	cmdExecutor     CommandExecutor // 命令执行器(抽象接口)
	dockerVersion   float64         // 缓存的Docker版本
	versionChecked  bool            // 版本检查标记
}

// CommandExecutor 命令执行器接口定义
type CommandExecutor interface {
	Execute(name string, arg ...string) ([]byte, error) // 统一方法命名
}

// RealCommandExecutor 实际命令执行器实现
type RealCommandExecutor struct{}

// updateInfo API请求参数结构体
type updateInfo struct {
	Service  string `json:"service" form:"service"`   // 服务名称
	Image    string `json:"image" form:"image"`       // 镜像版本
	FilePath string `json:"filePath" form:"filePath"` // 文件路径(可选)
}
